/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.uff.ihc.ontologico.modelo;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author luiz.silva
 */
public class Conceito implements Comparable{
    
    private int id;
    private String termo;
    private String descricao;
    private String textoSelecionado;
    private Map<Integer, Relacionamento> relacionamentos;
    private Map<Integer, Conceito> relacionadores;
    

    public Conceito(String termo, String descricao, String textoSelecionado) {
        this.termo = termo;
        this.descricao = descricao;
        this.textoSelecionado = textoSelecionado;
        relacionamentos = new HashMap<Integer, Relacionamento>();
        relacionadores = new HashMap<Integer, Conceito>();
    }

    public String getTermo() {
        return termo;
    }

    public void setTermo(String termo) {
        this.termo = termo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTextoSelecionado() {
        return textoSelecionado;
    }

    public void setTextoSelecionado(String textoSelecionado) {
        this.textoSelecionado = textoSelecionado;
    }
    
    public Relacionamento addRelacionamento(Conceito conceito, String tipoRelacionamento) {
        Relacionamento relacionamento = new Relacionamento(conceito, this, tipoRelacionamento);
        relacionamentos.put(conceito.getId(), relacionamento);
        conceito.addRelacionador(this);
        return relacionamento;
    }
    
    public Relacionamento removerRelacionamento(int id) {
        Relacionamento r = relacionamentos.remove(id);
        r.getConceito().removerRelacionador(this.getId());
        return r;
    }
    
    public void addRelacionador(Conceito conceito) {
        relacionadores.put(conceito.getId(), conceito);
    }
    
    public void removerRelacionador(int id) {
        relacionadores.remove(id);
    }
    
    public int compareTo(Object o) {
        return this.termo.compareTo(((Conceito) o).getTermo());
    }    

    @Override
    public String toString() {
        return termo;
    }
    
    public Collection<Relacionamento> getRelacionamentos(){
        return relacionamentos.values();
    }
    
    public Collection<Conceito> getRelacionadores(){
        return relacionadores.values();
    }

    public Relacionamento getRelacionamento(int idConceito) {
        return relacionamentos.get(idConceito);
    }
    
    public boolean isRelacionado(Conceito conceito){
        return relacionamentos.containsKey(conceito.getId());
    }

}
